#include<iostream>
using namespace std;


//int main()
//{
//	//强类型语言是一种强制类型定义的语言，即一旦某一个变量被定义类型，如果不经强制转换，那么它永远就是该数据类型。
//	//eg: Java、.net 、Python、C++等语言
//	//而弱类型语言是一种弱类型定义的语言，某一个变量被定义类型，该变量可以根据环境变化自动进行转换，不需要经过显性强制转换。
//	//eg: vb 、PHP、javascript等语言。
//	return 0;
//}
//void Test()
//{
//	int i = 1;
//	// 隐式类型转换
//	double d = i;
//	printf("%d, %.2f\n", i, d);
//	int* p = &i;
//	// 显示的强制类型转换
//	int address = (int)p;
//	printf("%x, %d\n", p, address);
//}

//void fun()
//{
//	size_t pos = 0;
//	int end = 10;
//	while (end >= pos)
//	{
//		cout << end << " ";
//		end--;
//	}
//}
//
//int main()
//{
//	fun();
//	return 0;
//}

//int main()
//{
//	double d = 12.34;
//	int a = static_cast<int>(d);
//	cout << a << endl;
//	return 0;
//}

//int main()
//{
//	double d = 12.34;
//	int a = static_cast<int>(d);
//	cout << a << endl;
//	//int *p = static_cast<int*>(a);// 这里使用static_cast会报错
//	int* p = reinterpret_cast<int*>(a);// 应该使用reinterpret_cast
//	return 0;
//}

//void Test()
//{
//
//	volatile const int a = 2;
//
//	int* p = const_cast<int*>(&a);
//	*p = 3;
//	cout << a << endl;
//	cout << *p << endl;
//}
//
//int main()
//{
//	Test();
//	return 0;
//}

//class A
//{
//public:
//	virtual void f() {}
//};
//class B : public A
//{};
//
//void fun(A* pa)// pa可能指向父类对象，也可能指向子类对象
//{
//	// dynamic_cast会先检查是否能转换成功，能成功则转换，不能则返回
//	//             如果pa指向父类对象，则转换不成功，返回nullptr；
//	//             如果pa指向子类对象，则转换成功，返回对象指针
//	B* pb1 = static_cast<B*>(pa);
//	B* pb2 = dynamic_cast<B*>(pa);
//	cout << "pb1:" << pb1 << endl;
//	cout << "pb2:" << pb2 << endl;
//}
//int main()
//{
//	A a;
//	B b;
//	fun(&a);
//	fun(&b);
//	return 0;
//}

template <class T, class Alloc = alloc>
class list
{};











